﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Text;
using hcom;
using LitJson;
using System.Collections;

namespace hcms.Templates
{
	public partial class d0 : System.Web.UI.UserControl
	{
		protected hcms.Admin.Model model = Global.model;
		private const string var = "var jsonparts = ";	// javascript变量名

		protected void Page_Load(object sender, EventArgs e)
		{
		}

		/// <summary>
		/// 服务器控件内容发送到提供的 HtmlTextWriter 对象，此对象编写将在客户端呈现的内容。详见 http://msdn.microsoft.com/zh-cn/library/system.web.ui.control.render
		/// </summary>
		/// <param name="writer">接收HTML文本的数据流</param>
		protected override void Render(HtmlTextWriter writer)
		{
			// 把板块html内容写成js文件，document.write("ctrl html")，在指定位置用jquery调入。保证时实性和静态性。
			// Instantiate a StringWriter...
			StringBuilder strBuilder = new StringBuilder(50000);
			//strBuilder.Append( "document.wirte( \"" );
			using (StringWriter stringWriter = new StringWriter(strBuilder, System.Globalization.CultureInfo.InvariantCulture))
			{
				// Instantiate an HtmlTextWriter...
				using (HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter))
				{
					// Render the page or control into the StringWriter...
					base.Render(htmlTextWriter);

					hString hs = new hString();
					hs.compressHtml(ref strBuilder);	// 去掉html文本中多余的字符。

					// 读板块JSON文件
					//string jsonpath = string.Format("{0}Templates\\parts.js", Request.PhysicalApplicationPath);	//取网站虚拟目录的实际文件夹
					string jsonpath = Server.MapPath("\\Templates\\parts.js");
					string jsonstr = File.Exists(jsonpath) ? File.ReadAllText(jsonpath) : "{}";

					// 修改对应的JSON数据
					JsonData jd = JsonMapper.ToObject(jsonstr.Replace(var, ""));			// 删除变量名
					jd[ID] = strBuilder.ToString();

					// 写入文件
					File.WriteAllText(jsonpath, var + jd.ToJson());

					/* 改用LitJson
					hString hs = new hString();
					hs.compressHtml(ref strBuilder);
					hs.ToJson( ref strBuilder );

					// 所有板块生成JSON数据集\Templates\parts.js文件，文件格式是：
					// var jsonparts = {
					// "d0":"..............",//"end"
					// "d1":"..............",//"end"
					// "00":""}//"end"
					// 每个板块独占一行，以//"end"为结束标志，最后一行是"00":""}//"end", 不能手动编辑。
					// ?? 板块删除后做个记号或删除。
					string jsonpath = string.Format("{0}Templates\\parts.js", Request.PhysicalApplicationPath);	//取网站虚拟目录的实际文件夹
					string jsonstr = File.Exists(jsonpath)
						? File.ReadAllText(jsonpath)
						: "var jsonparts = {\r\n\"00\":\"\"}//\"end\"";
					string key = "\"d" + ID + "\":\"";
					int n = jsonstr.IndexOf(key);
					if (n >= 0) //如果找到了
					{
						int n2 = jsonstr.IndexOf("\",//\"end\"", n);	// 板块尾
						if (n2 < 0)
							throw (new Exception("parts.js文件中找不到板块d" + ID + "的结尾符。"));

						n += key.Length;
						jsonstr = jsonstr.Remove(n, n2 - n);
						//jsonstr.Insert(n, strBuilder.ToString());
					}
					else //如果找不到
					{
						n = jsonstr.IndexOf("\"00\":\"\"}//\"end\""); // 找文件尾
						if (n < 0)
							throw (new Exception("找不到板块文件 parts.js 的结尾符。"));

						strBuilder.Insert(0, key);
						strBuilder.Append("\",//\"end\"\r\n");
						//jsonstr.Insert(n, strBuilder.ToString());
					}
					File.WriteAllText(jsonpath, jsonstr.Insert(n, strBuilder.ToString()));*/
				}

			}
		}

		/// <summary>
		/// 删除JSON文件parts.js中的板块数据
		/// </summary>
		/// <param name="ids">板块数据集，格式"10,11,14..."</param>
		public void deleteParts(string ids)
		{
			// 读板块JSON文件，因为有非页面调用，只能用System.AppDomain.CurrentDomain.BaseDirectory获取文件夹
			string jsonpath = string.Format("{0}Templates\\parts.js", System.AppDomain.CurrentDomain.BaseDirectory);	//取网站虚拟目录的实际文件夹
			string jsonstr = File.Exists( jsonpath ) ? File.ReadAllText(jsonpath) : "{}";

			// 修改对应的JSON数据
			const string var = "var jsonparts = ";							// javascript变量名
			JsonData jd = JsonMapper.ToObject(jsonstr.Replace(var, ""));	// 删除变量名

			// 删除板块数据
			string[] arr = ids.Split(',');
			foreach( string str in arr )
			{
				((IDictionary)jd).Remove(str);
			}

			// 写入文件
			File.WriteAllText(jsonpath, var + jd.ToJson());
		}

	}
}
